package com.xaicode.auth.security.scope;

import java.lang.annotation.*;

/**
 * 全局数据权限配置
 * <p>
 * 加入该注解后，方法执行前将进行当前用户的数据权限判定，
 * 并将相应数据权限转换为 sql 暂存到 {@link DataScopeContextHelper} 中。
 * 通过 DataPermissionInterceptor 中自定义的 query 方法拦截，
 * 将在执行指定方法前拼接权限 sql。
 * 
 * @date 2024/12/6
 * @see DataScopeType
 * @see DataScopeContextHelper
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataScope {

    /**
     * 是否开启数据权限控制
     *
     * @return true 默认开启
     */
    boolean enabled() default true;

    /**
     * 主数据表别名，用于关联查询时指定主表别名。
     * 多表查询时，不会对非主表进行数据权限类操作，需自行处理。
     * <p>
     * 注：该字段可能在多表查询时因 sql 拼接位置发生错误。
     */
    String tableAlias() default "";

    // ----

    /**
     * 待匹配的数字权限字段，当前默认 data_scope，匹配 BaseDataScopeEntity 字段。
     * 此处仅为扩展预留，请勿修改。
     */
    String scopeField() default "data_scope";

}
